


 



<html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 <title>ForTheCurious</title>
 </head>
 <body>
 




<div>
<table>
 <tr>
 
 
 <td style="vertical-align:top; padding-left:5px">
 
 <div id="wikicontent">
 <div class="vt" id="wikimaincol">
 <h2><a name="The_idea_behind_xatk"></a>The idea behind xatk<a href="#The_idea_behind_xatk" class="section_anchor"></a></h2><p>Most of window switchers are interactive. They provide attributes associated with windows (e.g. titles, icons, previews) which we scan first and than choose one of them. That works well enough when we deal with a set of applications for the first time. However, we regularly use the same applications. So, in most cases our wish to switch a window can be expressed like &quot;Show me &lt;my favourite text editor&gt;&quot;. One possible solution to switch between windows efficiently is to bind regularly used windows to keyboard shortcuts with such tools as <a href="http://tomas.styblo.name/wmctrl/" rel="nofollow">wmctrl</a> and <a href="http://www.nongnu.org/xbindkeys/xbindkeys.html" rel="nofollow">xbindkeys</a>. However, this approach has a few drawbacks: </p><ul><li>switching to the particular window of the program which has more than one window is hard if not impossible;  </li><li>only limited number of windows are covered; </li><li>manual composition of keyboard shortcuts which becomes even more boring when you stop using one program and start using another one; </li><li>it is not easy to keep in mind all defined keyboard shortcuts. </li></ul><p>xatk was created to resolve these deficiencies.  </p><h2><a name="How_xatk_works"></a>How xatk works<a href="#How_xatk_works" class="section_anchor"></a></h2><p>When a new window appears, xatk determines its special name called abstract window name (awn). This name is used for 2 purposes: <ul><li>windows which have the same awn fall into one group; </li><li>characters of awn are preferable keys to compose a shortcut from for the corresponding window. </li></ul></p><p>By default, window class property is assigned to awn. However, user may define own rules based on window class and window name (title) to form awns. </p><p>When awn of the window is determined, xatk looks it up in the history, holding awn — shortcut pairs. If the history contains the appropriate entry, xatk will bind the window to the previously used shortcut. Otherwise the shortcut is generated from the awn. This technique results in next xatk&#x27;s features: </p><ul><li>new shortcuts are usually not hard to remember as they are derived from the application names (more precisely, from the awns);   </li><li>regularly used windows have the same shortcuts all the time; </li><li>shortcuts of applications that are not used anymore for some time get freed. </li></ul><p>Windows which belong to the same group have the same base key which is the first key of the shortcut. </p><h2><a name="Keybindings"></a>Keybindings<a href="#Keybindings" class="section_anchor"></a></h2><p>xatk tries to compose keybindings which would be easy to press and predict. If a window is alone in the group, then to activate it you have to press a one-key shortcut while holding a prefix key. If the group contains more than one window, than a keybinding of the first window will remain the same (but window activation will be triggered by key release instead of key press). Other windows of the group will have keybindings with prefix+base key+suffix key scheme. Such notation means that you should press base key while holding prefix key and then press suffix key while holding base key. xatk takes into consideration the keyboard layout when it produces suffix keys. So, a distance between base key and suffix key is one, two, and three keys for the second, third, and fourth window of the group respectively. Another way to reach deeper windows of the group is cycling through them by pressing a base key repeatedly. </p><p>Finally, if you don&#x27;t like pressing key sequences, you can configure xatk not to group windows. </p>
 </div>
 </div>
 </td><tr>
</table>
 </div>


 </body>
</html>